package com.demo.hibernate.repository;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.demo.hibernate.entity.HUserInformation;

/**
 * 
 * @author Rose
 * 2017年9月27日
 * 
 *  1、在@Query注解中编写JPQL实现DELETE和UPDATE操作的时候必须加上@modifying注解，以通知Spring Data 这是一个DELETE或UPDATE操作。
 *	2、UPDATE或者DELETE操作需要使用事务，此时需要 定义Service层，在Service层的方法上添加事务操作。@Transactional
　*	3、注意JPQL不支持INSERT操作。
 * 
 */


@Repository
public interface LoginRegisterRepository extends CrudRepository<HUserInformation, Long> {
	//也可以实现JpaRepository接口
	HUserInformation findOne(Long id);

	
	@SuppressWarnings("unchecked")
	HUserInformation save(HUserInformation hUserInformation);

	@Query("from HUserInformation h where h.userCode =:userCode and h.userPassword=:userPassword")
	HUserInformation queryLogin(@Param("userCode") String userCode, @Param("userPassword") String userPassword);

	@Query("from HUserInformation h where h.id >=:s and h.id<=:e")
	List<HUserInformation> queryListByConditions(@Param("s") Long s, @Param("e") Long e);

	// @Query("from HUserInformation h where h.userCode like %:search%")
	@Query("from HUserInformation h where h.userCode like :search")
	Page<HUserInformation> queryListByConditionsPage(@Param("search") String search, Pageable pageable);
}
